﻿using System;
using System.Linq.Expressions;
using Dogshow.Model.Validation.MyVallidators;
using FluentValidation;
using FluentValidation.Results;
using FluentValidation.TestHelper;
using FluentValidation.Validators;

namespace Dogshow.Model.Validation
{
    public class PasValidator : AbstractValidator<Pas>
    {

        public PasValidator()
        {
            RuleFor(x => x.ImePsa).NotNull().WithMessage("Ime psa nije uneto")
                                  .Length(1, 50).WithMessage("Dužina imena psa [1~50] karaktera");
            RuleFor(x => x.BrojRodovnika).NotNull().WithMessage("Broj rodovnika nije unet");
            RuleFor(x => x.IdRase).NotNull().WithMessage("Rasa psa nije izabrana");
            RuleFor(x => x.Pol).NotNull().WithMessage("Pol nije izabran");
            RuleFor(x => x.BojaDlake).Length(0, 50).WithMessage("Boja dlake [0~50] karaktera");
            RuleFor(x => x.TipDlake).Length(0, 50).WithMessage("Tip dlake [0~50] karaktera");
            RuleFor(x => x.Visina).GreaterThan(5).WithMessage("Visina mora biti veca od 5 cm")
                                  .LessThan(200).WithMessage("Visina mora biti manja od 200 cm");
            RuleFor(x => x.Tezina).GreaterThan(0).WithMessage("Težina mora biti veća od 0 kg")
                                  .LessThan(200).WithMessage("Težina mora biti manja od 200 kg");

            Custom(x =>
            {
                if (x.Otac != null && x.IdRase != x.Otac.IdRase) return new ValidationFailure("IdRase", "Rasa psa se ne poklapa sa rasom oca");
                return null;
            });
            Custom(x =>
            {
                if (x.Majka != null && x.IdRase != x.Majka.IdRase) return new ValidationFailure("IdRase", "Rasa psa se ne poklapa sa rasom majke");
                return null;
            });
        }
    }
}